package com.strange3.deriglasoff.controllers
{
	import com.strange3.modulescontroller.DefaultModulesController;
	import com.strange3.utils.modules.ChapterModule;
	import com.strange3.utils.modules.ModuleLoadableContentCreator;
	import com.strange3.utils.modules.chaptermodule.event.ChapterModuleEvent;
	
	public class DeriglasoffModulesController extends DefaultModulesController
	{
			
		private static var bridgePlayed:Boolean = false;
		
		override public function start():void {			
			
			var introPrzyczepa:ModuleLoadableContentCreator = this._model.getModuleBySource("com/strange3/deriglasoff/modules/introPrzyczepa/IntroPrzyczepaModule.swf") as ModuleLoadableContentCreator;
			var introWlasciwe:ModuleLoadableContentCreator = this._model.getModuleBySource("com/strange3/deriglasoff/modules/introWlasciwe/IntroWlasciweModule.swf") as ModuleLoadableContentCreator;
			
			
			this._view.playModule(introPrzyczepa);
			this._view.playModule(introWlasciwe);
			
			var modulesCount:int = this._model.length;
	
			// dla intra wlasciwego dodajemy pierwszy listener zmiany chapterów
			introWlasciwe.addEventListener(ChapterModuleEvent.CHANGE_CHAPTER, onMenuChangeChapter);
			
			
			// teraz dla wszystkich pozostalych chapterow dodajemy listenery
			// zmiany aktywnego chapterów mapujce do inej funkcji
			for(var i:int =0; i<modulesCount; i++) {
				
				var module:ChapterModule = this._model.getModuleAt(i) as ChapterModule;
				if (module != introWlasciwe) {					
					module.addEventListener(ChapterModuleEvent.CHANGE_CHAPTER, onChangeChapter);
				}
			} 	
			
		}
		
		private function onChangeChapter(e:ChapterModuleEvent):void {
			var newChapterSource:String = e.newChapter;
			var newModule:ModuleLoadableContentCreator = this._model.getModuleBySource(newChapterSource) as ModuleLoadableContentCreator;
			
			this._view.playModule(newModule);
		}
		
		private function onMenuChangeChapter(e:ChapterModuleEvent):void {
			
			var newChapterSource:String = e.newChapter;
			var newModule:ModuleLoadableContentCreator = this._model.getModuleBySource(newChapterSource) as ModuleLoadableContentCreator;
			var bridge:ModuleLoadableContentCreator = this._model.getModuleBySource("com/strange3/deriglasoff/modules/bridge/BridgeModule.swf") as ModuleLoadableContentCreator;
			
			if(!newModule) {
				
				// nie mamy tego modulu w aktualnej strukturze modelu,
				// trzeba go zaladowac eksternistycznie i dodac do widoku recznie
				newModule = new ChapterModule();
				newModule.url = newChapterSource;
				
				// musimy wywolac recznie initialize, poniewaza nie dodajemy
				// go w tym miejscu jeszcze do listwy wyswietlania i bez tego
				// nie odpali sie procedura tworzenia tego komponentu
				newModule.initialize();	
				
				newModule.loadModule();						
				
				// dodajemy do modelu
				this._model.add(newModule);				
			}
			
			// jeli nie zaladowano jeszcze modulu, ktory chcemy odtworzyc, lub bridge nie 
			// zostal odpalony choc raz, to musmy bridge odpalic		
			if(!newModule.contentLoaded || !bridgePlayed) {
				
				this._view.playModule(bridge);
				bridgePlayed = true;
			}
			
			// potem reszta
			this._view.playModule(newModule);
		}
	}
}